//
//  Problem1816.swift
//  TestProject
//
//  Created by 武侠 on 2021/4/8.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1816. 截断句子
 句子 是一个单词列表，列表中的单词之间用单个空格隔开，且不存在前导或尾随空格。每个单词仅由大小写英文字母组成（不含标点符号）。

 例如，"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。
 给你一个句子 s​​​​​​ 和一个整数 k​​​​​​ ，请你将 s​​ 截断 ​，​​​使截断后的句子仅含 前 k​​​​​​ 个单词。返回 截断 s​​​​​​ 后得到的句子。

 示例 1：
     输入：s = "Hello how are you Contestant", k = 4
     输出："Hello how are you"
     解释：
     s 中的单词为 ["Hello", "how" "are", "you", "Contestant"]
     前 4 个单词为 ["Hello", "how", "are", "you"]
     因此，应当返回 "Hello how are you"
 示例 2：
     输入：s = "What is the solution to this problem", k = 4
     输出："What is the solution"
     解释：
     s 中的单词为 ["What", "is" "the", "solution", "to", "this", "problem"]
     前 4 个单词为 ["What", "is", "the", "solution"]
     因此，应当返回 "What is the solution"
 示例 3：
     输入：s = "chopper is not a tanuki", k = 5
     输出："chopper is not a tanuki"
  
 提示：
     1 <= s.length <= 500
     k 的取值范围是 [1,  s 中单词的数目]
     s 仅由大小写英文字母和空格组成
     s 中的单词之间由单个空格隔开
     不存在前导或尾随空格
 */
@objcMembers class Problem1816: NSObject {
    func solution() {
        print(truncateSentenceSqilt("Hello how are you Contestant", 4))
        print(truncateSentenceSqilt("What is the solution to this problem", 4))
        print(truncateSentenceSqilt("chopper is not a tanuki", 5))
        print(truncateSentenceSqilt("chopper is not a tanuki", 1))
        print(truncateSentenceSqilt("chopper", 1))
    }
    
    /*
     遍历：
     1: 遇到空格计数n+=1
     2: 当n==k，结束
     3: 主要假如k正好等于句子的单词个数，需要在结尾多判断一次
     */
    func truncateSentence(_ s: String, _ k: Int) -> String {
        var n = 0
        var end = 0
        for (i,c) in s.enumerated() {
            if c == " " {
                n += 1
                if n == k {
                   end = i
                    break
                }
            }
        }
        if end == 0 {
            end = s.count
        }
        
        return String(s[s.startIndex..<s.index(s.startIndex, offsetBy: end)])
    }
    
    func truncateSentenceSqilt(_ s: String, _ k: Int) -> String {
        let list = s.split(separator: " ")
        var str = ""
        for i in 0..<k {
            if i != 0 {
                str.append(" ")
            }
            str.append(contentsOf: list[i])
        }
        return str
    }
}
